package com.wy.about_data_share.demo2;

/**
 * 变量本质是对一块内存的抽象
 * 观察下面r
 * 两个r只是名字都叫r，但不是同一块内存
 **/
public class Main {
    static class MyThread extends Thread{
        private final int total;
        public MyThread(int total){
            this.total=total;
        }
        @Override
        public void run() {
            int r=0;//r存在于子线程run方法发栈帧中
            for (int i=0;i<1000;i++){
                r++;
            }
            System.out.println(Thread.currentThread().getName()+":"+r);
        }
    }

    /**
     * 一共在内存中开辟了几个名叫r的内存块
     * 4个
     * t1线程下的run方法下的r
     * t2.run.r
     * t3.run.r
     * 主线程.main.r
     */
    public static void main(String[] args) throws InterruptedException {
        int r=0;//r存在于主线程main的栈帧中
        MyThread t1=new MyThread(1000);
        t1.start();//开启线程
        MyThread t2=new MyThread(1000);
        t2.start();//开启线程
        MyThread t3=new MyThread(1000);
        t3.start();//开启线程
        t1.join();//
        t2.join();//等待线程结束
        t3.join();//等待线程结束
        System.out.println(r);//此处r仍为0，因为++的是子线程调用到的r，不是主线程的
    }
}
